package com.hsp.innerClass;

/*
演示局部内部类
 */
public class LocalInnerClass {
    public static void main(String[] args) {
        Outer02 outer02 = new Outer02();
        outer02.m1();
    }
}

class Outer02{//外部类
    private int n1 = 100;
    private void m2(){
        System.out.println("Outer02 m2()");
    }
    public void m1(){
        //局部内部类是定义在外部类的局部位置，通常在方法中
        class Inner02{//局部内部类
            private int n1 = 800;
            //可以直接访问外部类的所有成员，包含私有的
            public void f1(){
                //局部内部类可以直接访问外部类的成员
                //如果外部类和局部内部类的成员重名时，默认遵循就近原则，如果想访问外部类的成员
                //使用外部类名.this.成员  去访问
                m2();
                System.out.println("n1="+n1+"外部类的n1="+Outer02.this.n1);//Outer02.this  本质就是外部类的对象
                                                //即那个对象调用了m1，Outer.this就是哪个对象
                System.out.println("Outer02.this hashcode"+Outer02.this);
            }

        }
        //外部类在方法中可以创建Inner02的对象实例，然后调用方即可
        Inner02 inner02=new Inner02();
        inner02.f1();
    }
}
